Caches allow data to be stored at a location that enables faster access to the data. For example, the cache may be a faster storage and/or located closer to a desired location. Often caches are smaller in size to be cost effective and efficient in performance. This requires the data stored in the cache to be a duplicate store of an original data stored elsewhere in a larger storage. If a requested data is stored in a cache, the requested data can be provided using the data in the cache. However, if the requested data is not stored in the cache, the data has to often be obtained from another slower cache and/or an original repository of the data, all of which are comparatively slower. Thus, it is desirable to serve data requests from the fastest cache as often as possible by placing in the cache data that will be likely requested in the future. One way of predicting which data might be requested from the cache is to place in the cache the data that has been utilized the most in the past. Previously, determining the most utilized data required storing a counter for each data that may be placed in the cache and iterating the counter every time an associated data is accessed. However, storing and maintaining a counter for each potentially accessed data consumes valuable storage and computing resources. Therefore there exists a need for a better way to determine which data to store in a cache.